Flash memory is a type of non-volatile memory that can be electrically programmed and erased. Its most common use is storing control code for a computer BIOS (Basic Input Output System). However, this technology is becoming increasingly popular for removable solid-state devices including memory cards for digital devices (e.g., camera, phone, audio player, personal digital assistant (PDA), recorder, game system, set-top box, network switches, embedded controllers . . . ) and USB drives (e.g., thumb drive, flash stick, jump drive . . . ) to facilitate storage and transfer of data between and amongst digital devices and/or computers. Its popularity is due to the many advantages it has over other types of non-volatile memory such as a hard disk: flash memory is noiseless, small in size, light in weight, provides fast access, and has higher reliability as it does not contain moving parts.
At present, there are two major types of flash memory used in the market: NAND (NAND gate) and NOR (NOR gate). NAND flash is a media divided into a collection of blocks, which are further subdivided into pages anywhere from the traditional 512 bytes in size to 2 KB in size for large-block NAND. Each page is then further divided into two distinct sections, namely a data area used to store information and an extra area to store additional information (e.g., metadata). NOR flash is a media that is segmented into a collection of blocks and all bytes are individually addressable. For instance, NOR flash memory can be split into a series of contiguous blocks (e.g., 1 through N) and similar to conventional RAM, every byte in these blocks is individually addressable.
Both NAND and NOR flash conventionally suffer from several physical constraints. First, write operations can typically only set a logical “1” to a logical “0.” Second, erasing a block sets all the bits in the block to a logical “1.” Further, only blocks can be erased. It is not possible to erase individual pages/bytes in a block without erasing all pages/bytes within the same place. Blocks also have limited erase or write/erase lifetimes.
Various mechanisms/techniques are often employed in view of the above flash memory characteristics. For instance, wear-leveling techniques are utilized on a media to maximize its lifetime. Additionally, a technique for effectively erasing blocks without losing data is frequently used. Further, error correction codes (ECC) are conventionally used to safeguard against data corruption due to leaks, for example.